#ifndef VertexPositionColor_h
#define VertexPositionColor_h

#include <Defines.h>
#include <CSharpPropertyMethods.h>

// Riccsson includes.
#include <System/Object.h>
#include <System/Type.h>
#include <System/String.h>

// XNA includes.
//#include "../../Color.h"
#include "../../Vector2.h"
#include "../../Vector3.h"
#include "../Vertices/IVertexType.h"
#include "../Vertices/VertexElementColor.h"
#include "../Vertices/VertexElement.h"

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
			// Forward declerations.
			struct Color;

			namespace Graphics
			{
				//[StructLayout(LayoutKind.Sequential, Pack = 1)]
				struct VertexPositionColor
					: public Riccsson::System::Object
					, public IVertexType
				{
					public: Vector3 Position;
					public: VertexElementColor color;

					public: static /*readonly*/ GC_PTR<VertexDeclaration> vertexDeclaration;

					public: VertexPositionColor (Vector3 position, Color& color_);

					public: PROP3_GET(GC_PTR<VertexDeclaration>, vertexDeclaration)
					{
						throw; // Check the code under me. How can we use it?
					}
					//VertexDeclaration IVertexType.VertexDeclaration {
					//	get {
					//		return VertexDeclaration;
					//	}
					//}
					public: override int GetHashCode ();
					public: override GC_PTR<Riccsson::System::string> ToString ();
					public: override bool Equals (const Riccsson::System::object* obj);

					REGISTER_CLASS_NO_DEFAULT_CONSTRUCTOR(VertexPositionColor)
				};

					
				bool operator == (VertexPositionColor& left, VertexPositionColor& right)
				{
					return ((left.color == right.color) && (left.Position == right.Position));
				}

				bool operator != (VertexPositionColor& left, VertexPositionColor& right)
				{
					return !( ((left.color == right.color) && (left.Position == right.Position)) );
				}

			}
		}
	}
}

#endif
